# Python datetime库使用

# 导入所需的库
from datetime import datetime, timedelta
import time

# 1. 获取当前日期和时间
print("=== 获取当前日期和时间 ===")
current_time = datetime.now()
print(f"时间类型: {type(current_time)}")
print(f"当前日期和时间: {current_time}")
print(f"年: {current_time.year}")
print(f"月: {current_time.month}")
print(f"日: {current_time.day}")
print(f"时: {current_time.hour}")
print(f"分: {current_time.minute}")
print(f"秒: {current_time.second}")

# 2. 创建指定日期时间的对象
print("\n=== 创建指定日期时间 ===")
specific_date = datetime(2024, 1, 1, 12, 30, 0)
print(f"指定的日期和时间: {specific_date}")

# 3. 日期时间格式化（strftime）
print("\n=== 日期时间格式化 ===")
formatted_date = current_time.strftime("%Y年%m月%d日 %H:%M:%S %a %A 第%j天 第%W周 %p")
print(f"格式化后的日期时间: {formatted_date}")
# 表示日期时间的格式化字符可参考如下：
# - %Y: 四位年份
# - %m: 两位月份
# - %d: 两位日期
# - %H: 24小时制小时
# - %M: 分钟
# - %S: 秒
# =======
# - %A: 完整的星期名称，比如Sunday
# - %a: 缩写的星期名称，比如Sun
# - %j: 一年中的第几天
# - %W: 一年中的第几周
# - %p: 上午或下午，比如AM或PM
# 其中前6个是最常用的，建议记住

# 4. 字符串解析为日期对象（strptime）
print("\n=== 字符串解析为日期 ===")
date_string = "2024-02-14 15:30:00"
# 第二个参数表示日期字符串的格式
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"解析后的日期对象: {date_object}")

# 5. 时间差计算（timedelta）
print("\n=== 时间差计算 ===")
# 计算一周后的日期
one_week_later = current_time + timedelta(days=7)
print(f"一周后的日期: {one_week_later}")

# 计算两个日期之间的差值
date1 = datetime(2024, 1, 1)
date2 = datetime(2024, 12, 31)
date_diff = date2 - date1
print(f"2024年1月1日到12月31日相差: {date_diff.days}天")

# 6. 实际应用：计算时间差并转换为时分秒
def seconds_to_hms(seconds):
    """将秒数转换为时分秒格式"""
    # 使用divmod函数同时获取商和余数
    hours, remainder = divmod(seconds, 3600)  # 先计算小时
    minutes, seconds = divmod(remainder, 60)  # 再计算分钟和剩余秒数
    return int(hours), int(minutes), int(seconds)

# 示例：计算程序运行时间
print("\n=== 程序运行时间计算示例 ===")
start_time = time.time()  # 记录开始时间

# 模拟程序运行（这里用睡眠3.5秒作为示例）
time.sleep(3.5)

end_time = time.time()  # 记录结束时间
total_seconds = end_time - start_time  # 计算总秒数

# 转换为时分秒格式
hours, minutes, seconds = seconds_to_hms(total_seconds)
print(f"程序运行时间: {hours}小时 {minutes}分钟 {seconds}秒")
print(f"总计: {total_seconds:.2f}秒")